package it.probabili.formazioni.vo;

import it.probabili.formazioni.utility.Utils;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class Squadra {
	
	private URL linkAggiornamento;
	private String nomeSquadra;
	
	private Map<String,Giocatore> titolari = new HashMap<String,Giocatore>(0);
	private Map<String,Giocatore> panchina = new HashMap<String,Giocatore>(0);
	private Map<String,Giocatore> indisponibili = new HashMap<String,Giocatore>(0);
	private Map<String,Giocatore> squalificati = new HashMap<String,Giocatore>(0);
	
	public Squadra(String nomeSquadra,Object linkAggiornamento){
		if(linkAggiornamento instanceof String){
			try {
				this.linkAggiornamento = new URL((String)linkAggiornamento);
			} catch (MalformedURLException e) {
				this.linkAggiornamento = null;
				e.printStackTrace();
			}
		}else if(linkAggiornamento instanceof URL){
			this.linkAggiornamento = (URL)linkAggiornamento;	
		}
		
		this.nomeSquadra = nomeSquadra.trim().toUpperCase();
	}
	
	public String getNomeSquadra() {
		return nomeSquadra;
	}
	
	public URL getLinkAggiornamento() {
		return linkAggiornamento;
	}
	
	
	public Map<String, Giocatore> getTitolari() {
		return titolari;
	}

	public Map<String, Giocatore> getPanchina() {
		return panchina;
	}

	public Map<String, Giocatore> getIndisponibili() {
		return indisponibili;
	}

	public Map<String, Giocatore> getSqualificati() {
		return squalificati;
	}

	public void addGiocatoreTitolare(Giocatore giocatore){
		titolari.put(giocatore.getNome(),giocatore);
	}
	
	public void addGiocatorePanchina(Giocatore giocatore){
		panchina.put(giocatore.getNome(),giocatore);
	}
	
	public void addGiocatoreIndisponibili(Giocatore giocatore){
		indisponibili.put(giocatore.getNome(),giocatore);
	}
	
	public void addGiocatoreSqualificati(Giocatore giocatore){
		squalificati.put(giocatore.getNome(),giocatore);
	}
	
	/**
	 * aggiunge alla lista (passata come parametro) i giocatori presenti nel  nodoGiocatori 
	 * @param nodoGiocatori
	 * @param lista
	 * 
	 */
	public void addAllGiocatori(NodeList nodoGiocatori, Map<String,Giocatore> lista){
		if(nodoGiocatori!=null){
			Element persona;
			String nome;
			Node nodo;
			for (int i = 0; i < nodoGiocatori.getLength(); i++) {
				nodo = nodoGiocatori.item(i);
				if (nodo.getNodeType() == Node.ELEMENT_NODE) {
					persona = (Element) nodo;
					nome = persona.getTextContent();
					
					lista.put(nome, new Giocatore(nome)); 
				}
			}
		}
	}
	
	/**
	 * STAMPA INTERA SCHEDA DELLA SQUADRA
	 * @param debug - true= stampa link di aggiornamento
	 */
	public void printSquadra(boolean debug){
		System.out.println("\nNOME SQUADRA: " + nomeSquadra);
		if(debug){
			System.out.println("link: " + linkAggiornamento);
		}
		System.out.println("== TITOLARI ==");
		Utils.stampaListaGiocatori(titolari);
		
		System.out.println("== PANCHINA ==");
		Utils.stampaListaGiocatori(panchina);
		
		System.out.println("== SQUALIFICATI ==");
		Utils.stampaListaGiocatori(squalificati);
		
		System.out.println("== INDISPONIBILI ==");
		Utils.stampaListaGiocatori(indisponibili);
		System.out.println("== == == == ==");
	}
	
}
